package com.atguigu.gmalllogger.controller;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

/**
 * @Author lzc
 * @Date 2020/12/2 10:10
 */
/*@Controller
@ResponseBody*/
@RestController
@Slf4j
public class LoggerController {

    @PostMapping("/applog")
    public String appLog(@RequestBody String strLog) {
        // 1. 把日志落盘 (给离线的同事)
        saveLogToDisk(strLog);
        // 2. 把数据写入到kafka, 给实时分析使用
        sendLogToKafka(strLog);

        return "ok";
    }

    @Autowired  // 自动注入的注解, 自动创建KafkaTemplate
    KafkaTemplate<String, String> kafka;
    /**
     * 把日志数据发送到Kafka
     * @param strLog
     */
    private void sendLogToKafka(String strLog) {
        JSONObject obj = JSON.parseObject(strLog);
        if (obj.containsKey("start") && obj.getString("start").length() > 2) {
            // 发送到一个topic
            kafka.send("gmall_start_topic", strLog);
        }else{
            kafka.send("gmall_event_topic", strLog);
        }
    }

    /**
     * 把日志写入到磁盘
     *
     * @param strLog
     */
    private void saveLogToDisk(String strLog) {
        log.info(strLog);
    }
}
/*
http访问常用的两种请求:
get
    传给服务器的数据在url  http://localhost:8080/applog?a=b&aa=bb
post
    传给服务器的数据在请求体
    更加安全

发送的数据的位置
 */